package com.redeemer150.aisuperagent.rag.vectors;


import com.redeemer150.aisuperagent.rag.documentreader.LoveAppDocumentLoader;
import jakarta.annotation.Resource;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.pgvector.PgVectorStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.jdbc.core.JdbcTemplate;

import static org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgDistanceType.COSINE_DISTANCE;
import static org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgIndexType.HNSW;

/**
 * @author 炼金术士
 * @version 1.0
 * @description: 基于阿里云PGVector数据库读取的RAG(基于)
 * @date 2025/7/11 17:40
 */
@Configuration
@Lazy
public class LoveAppPgVectorStoreConfig {

        @Resource
        private LoveAppDocumentLoader loveAppDocumentLoader;

        @Bean
        public VectorStore pgVectorVectorStore(JdbcTemplate jdbcTemplate, EmbeddingModel dashscopeEmbeddingModel) {
            VectorStore vectorStore = PgVectorStore.builder(jdbcTemplate, dashscopeEmbeddingModel)
                    .dimensions(1536)                    // Optional: defaults to model dimensions or 1536
                    .distanceType(COSINE_DISTANCE)       // Optional: defaults to COSINE_DISTANCE
                    .indexType(HNSW)                     // Optional: defaults to HNSW
                    .initializeSchema(true)              // Optional: defaults to false
                    .schemaName("public")                // Optional: defaults to "public"
                    .vectorTableName("vector_store")     // Optional: defaults to "vector_store"
                    .maxDocumentBatchSize(10000)         // Optional: defaults to 10000
                    .build();
            return vectorStore;
        }
}
